Amazon Connect チャットでアンケートの仕組みを作ってみた

Amazon Connect チャットでアンケートの仕組みを作ってみた

Clock Icon2024.12.11

Amazon Connect アドベントカレンダー 2024、11日目の記事です!

クラスメソッドとギークフィードさん、クラウドビルダーズさん、ネットプロテクションズさん、AWSJさんの有志が募ってチャレンジしている企画になります。

(アドベントカレンダーのカレンダー一覧はこちら↓)
https://qiita.com/advent-calendar/2024/amazon-connect

はじめに

Amazon Connectのチャットを使い、アンケートを取る仕組みを考えてみました。
チャットでアンケート用のビューを顧客に表示しアンケートを取ります。
結果はLambdaからDynamoDBに保存します。

shapes-1733828197362

やってみた

前提条件

  • Amazon Connectは構築済み

Amazon Connectの設定1

チャットの設定

洲崎さんのブログを参考にチャットの設定を行います。
https://dev.classmethod.jp/articles/amazon-connect-cloudfront-s3-chatwidget/

ビューの作成

Amazno Connectコンソールにログインしルーティング > フロー > ビュー を開き、ビューを作成を選択します。
2024-12-09_22h26_41

Formをドラッグ&ドロップで追加します。
2024-12-11_01h39_25

Containerを2つドラッグ&ドロップで追加します。
2024-12-11_01h42_49

Text BoxとRadio Groupを追加します。
2024-12-11_01h44_29

Text Boxの内容を入力します。
Radio GroupのLabelとValueを入力します。
2024-12-11_01h48_23

NameはQ1とQ2で別々の値を設定する必要があります。
2024-12-11_01h54_13

Submit ButtonのLabelを変更します。
2024-12-11_01h55_46

名前を入力し保存と公開を選択します。
2024-12-11_01h57_12

DynamoDBの設定

以下の内容でDynamoDBを作成します。
パーティションキー:contact_id(文字列)
ソートキー:date(文字列)
2024-12-11_11h20_53

Lambdaの設定

Lambda関数の作成

Lambda関数を作成します。
ランタイムはPython 3.13で作成します。
2024-12-11_11h26_22

一般設定のタイムアウトを1分に変更します。
2024-12-04_20h51_34

ロールに権限の追加

DynamoDBの記録用に以下の権限を追加します。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "dynamodb:PutItem"
            ],
            "Resource": "*"
        }
    ]
}

コード

コード内のDynamoDBテーブル名を作成したDynamoDBテーブル名に変更します。
ビューから送信されるイベントのContactIdとアンケート結果のinput-1、input-2をDynamoDBに記録します。

import boto3
import datetime
import json
from datetime import timedelta

def lambda_handler(event, context):
    # AWS クライアントの初期化
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('DynamoDBテーブル名')

    # 現在の日時(JST)を取得
    jst_time = datetime.datetime.now() + timedelta(hours=9)
    current_date = jst_time.strftime('%Y-%m-%d')

    # ContactIdの取得
    contact_id = event['Details']['ContactData']['ContactId']

    # inputの取得
    view_result_data = json.loads(event['Details']['Parameters']['form']['ViewResultData'])
    input_1 = view_result_data['input-1']
    input_2 = view_result_data['input-2']

    # DynamoDB のレコードを更新
    table.put_item(
        Item={
            'date': current_date,
            'contact_id': contact_id,
            'Q1': input_1,
            'Q2': input_2
        }
    )

Amazon Connectの設定2

Lambda関数の追加

作成したLambda関数をAmazon Connectに追加します。
AWSコンソール→Amazon Connect(対象のインスタンス)→問い合わせフローを開きます。
AWS Lambdaの項目で作成したLambda関数を選択し「+Add Lambda Function」を選択します。
2024-12-11_23h04_36

コンタクトフローの作成

以下のフローを作成します。
2024-12-11_23h06_47

ビューを表示ブロックに作成したビューを設定します。
2024-12-11_23h08_11

Lambda 関数を呼び出すに作成したLambda関数と入力パラメータを設定します。
宛先キー:form
値:$.Views
2024-12-11_23h11_55

ビューは「$.Views.ViewResultData」のように出力されます。
https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/view-resources-custom-view.html

チャットのフロー変更

チャットに設定されているフローを作成したものに変更します。
対象のチャットを開き、編集を選択します。
2024-12-10_07h28_22

チャットのコンタクトフローを作成したフローに変更します。
2024-12-10_07h29_26

動作確認

チャットを開くとアンケートの入力フォームが表示されるので入力し送信します。
2024-12-11_23h18_36

DynamoDBにアンケート結果が記録されました。
2024-12-11_23h20_08

さいごに

Amazon Connectのチャットを使いアンケートを取る方法を考えてみました。
今回はDynamoDBに記録しましたが、SINさんのブログ([Amazon Connect] 電話アンケートの仕組みを作ってみた)のように集計した結果をS3に記録して可視化するとアンケートとしてよりよいものになりそうですね。

https://dev.classmethod.jp/articles/amazon-connect-surveys/

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.